from tkinter import *
from aip import AipSpeech
import pygame
import time
import shutil
import os



class baiduGui():
    def __init__(self,init_window_name):
        self.init_window_name = init_window_name
        self.init_window_name.resizable(False,False) # 窗口缩放
        """ 你的 APPID AK SK """
        self.APP_ID = '9729136'
        self.API_KEY = '8gBb5mb9aEu1Pf3sbuzw1qvU'
        self.SECRET_KEY = 'H7gVkowAKSGiX6YmZ43665zLf7XBCh0o'
        self.aipSpeech = AipSpeech(self.APP_ID, self.API_KEY, self.SECRET_KEY)

        self.__init()

    def __init(self):
        pygame.mixer.init()
        if os.path.isdir("temp"):
            # 存在
            shutil.rmtree("temp")
        os.mkdir("temp")

    #设置窗口
    def set_init_window(self):
        self.init_window_name.title("百度语音合成_v0.0   by: wilson")      #窗口名

        self.init_window_name.update()  # 更新窗口
        curWidth = self.init_window_name.winfo_reqwidth()
        curHeight = self.init_window_name.winfo_height()
        scnWidth, scnHeight = self.init_window_name.maxsize()
        tempConf = '%dx%d+%d+%d' % (360, 260,
                                  (scnWidth - curWidth) / 2, (scnHeight - curHeight) / 2)
        self.init_window_name.geometry(tempConf)
        # 标签
        self.init_data_label = Label(self.init_window_name, text="输入文字：")
        self.init_data_label.grid(row=0, column=0)
        # 文本框
        self.init_data_Text = Text(self.init_window_name, width=50, height=5)  # 原始数据录入框
        self.init_data_Text.grid(row=1, column=0, rowspan=1, columnspan=1)
        # 按钮
        self.test_button = Button(self.init_window_name, text="合成", bg="lightblue", width=10,
                                              command=self.test)  # 调用内部方法  加()为直接调用
        self.test_button.grid(row=2, column=0)

    # 获取当前时间
    def get_current_time(self):
        current_time = time.strftime('%Y%m%d%H%M%S', time.localtime(time.time()))
        return current_time

    # 功能函数
    def test(self):
        src = self.init_data_Text.get(1.0, END).strip().replace("\n", "")
        nowTime = self.get_current_time()
        if src:
            result = self.aipSpeech.synthesis(src, 'zh', 1, {
                'vol': 5,
            })
            # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
            if not isinstance(result, dict):
                with open("temp/{}.mp3".format(nowTime), "wb") as f:
                    f.write(result)
                pygame.mixer.music.load(r"temp/{}.mp3".format(nowTime))
                pygame.mixer.music.play(1)


def gui_start_test():
    init_window = Tk()              #实例化出一个父窗口
    ZMJ_PORTAL = baiduGui(init_window)
    # 设置根窗口默认属性
    ZMJ_PORTAL.set_init_window()

    init_window.mainloop()          #父窗口进入事件循环，可以理解为保持窗口运行，否则界面不展示


if __name__ == '__main__':
    gui_start_test()